class Categoria < ActiveRecord::Base
  
  has_many :categoria_conteudo, :dependent=>:destroy
  has_many :conteudos, :through => :categoria_conteudo

  acts_as_nested_set :scope => :categorizacao_id
  validates_presence_of :nome
  attr_accessor :style
  attr_accessor :nivel
  def self.roots
    self.find(:all, :conditions=>["parent_id = ?", 0])
  end
  
  def criar_filha(params_da_filha)
    categoria = Categoria.new(params_da_filha)
    categoria.categorizacao_id = self.categorizacao_id
    categoria.save
    categoria.move_to_child_of self
    categoria
  end
  
  def to_label
    @attributes['nome']
  end

  def level
    self.ancestors.size
  end
  
  def self.raizes
    self.find(:all,:conditions=>'parent_id IS NULL')
  end
  
  #recebe hash onde as chaves s�o os ids das categorias e os valores s�o:
  # false caso seja apenas aquela categorial.
  # o id do escopo (categorizacao) caso seja a categoria e suas filhas.
  def self.sql_ids_conteudos_categorias(ids_categorias)
    
    sql = " SELECT DISTINCT cc1.conteudo_id FROM categoria_conteudo as cc1"
    primeiro = true
    count_joins = 1
    ids_categorias.each_pair do |categoria_id,categorizacao_id|
      primeiro = false
      if categorizacao_id
        if !primeiro 
          count_joins += 1
	  tabela_categoria_conteudo = "cc#{count_joins}"
          sql << " inner join categoria_conteudo as #{tabela_categoria_conteudo} "
          sql << " on cc1.conteudo_id = #{tabela_categoria_conteudo}.conteudo_id "
	  primeiro = false
        end
	categoria = Categoria.find(categoria_id)
	tabela_categoria = "c#{count_joins}"
        sql << " inner join categoria as #{tabela_categoria} "
	sql << " on #{tabela_categoria_conteudo}.categoria_id = #{tabela_categoria}.id "
	sql << " and #{tabela_categoria}.categorizacao_id = " + categorizacao_id.to_s
	sql << " and #{tabela_categoria}.lft>=" + categoria.lft.to_s
	sql << " and #{tabela_categoria}.rgt<=" + categoria.rgt.to_s + " "
      else
         count_joins += 1
	 tabela_categoria_conteudo = "cc#{count_joins}"
         sql << " inner join categoria_conteudo as #{tabela_categoria_conteudo} "
         sql << " on cc1.conteudo_id = #{tabela_categoria_conteudo}.conteudo_id "
	 sql << " and #{tabela_categoria_conteudo}.categoria_id = #{categoria_id} "
      end
    end #ids_categorias.each_pair 
    sql
  end #def 

end
